package com.jblank.dao;

import java.util.List;
import java.util.Map;

import com.jblank.common.config.QueryConfig;
import com.jblank.common.config.SaveConfig;
import com.jblank.dto.DTO;

/**
 * Dao接口
 * @author kim
 * @since 2013-07-22
 */
public interface Dao {
	
	
	
	public Dao newData() throws Exception;
	/**
	 * 增加数据，单条数据
	 * @param insertDto 参数
	 * @return 是否成功
	 */
	public boolean insert(String tableName,List flds,List values) throws Exception;
	
	/**
	 * 增加数据，单条数据
	 * @param saveConfig
	 * @return 是否成功
	 */
	public boolean insert(SaveConfig saveConfig) throws Exception;
	
	/**
	 * 数据导入
	 * @param batchDto 参数
	 * @return 是否成功
	 */
	public boolean insertBatch(DTO batchDto) throws Exception;
	
	/**
	 * 数据删除
	 * @param tableName 表名
	 * @param condExp	条件表达式，如：username = ? and password = ?
	 * @param condVars	对应的参数值
	 * @return 是否成功
	 */
	public boolean delete(String tableName,String condExp,Object[] condVars) throws Exception;
	
	/**
	 * 数据删除
	 * @param tableName 表名
	 * @param condExp 条件表达式，如：username = :username and password = :password
	 * @param condVars	对应参数的map
	 * @return 是否成功
	 */
	public boolean delete(String tableName,String condExp,Map condVars) throws Exception;
	
	/**
	 * 数据删除
	 * @param tableName 表名
	 * @param primaryKey 主键字段
	 * @param value	查询的主键值
	 * @return 是否成功
	 */
	public boolean delete(String tableName,String primaryKey,String value) throws Exception;
	
	/**
	 * 数据删除(不建议使用)
	 * @param tableName 表名
	 * @param cond	条件
	 * @return 是否成功
	 */
	public boolean delete(String tableName,String cond) throws Exception;
	
	/**
	 * 数据删除
	 * @param saveConfig
	 * @return 是否成功
	 */
	public boolean delete(SaveConfig saveConfig) throws Exception;
	
	
	/**
	 * 更新数据
	 * @param tableName 表名
	 * @param varMap	字段与值的map
	 * @param condExp	条件表达式
	 * @param condVars	参数值
	 * @return 是否成功
	 */
	public boolean update(String tableName,Map varMap,String condExp,Object[] condVars) throws Exception;
	
	/**
	 * 更新数据
	 * @param tableName 表名
	 * @param varMap	字段与值的map
	 * @param condExp	条件表达式
	 * @param condVars	参数值
	 * @return 是否成功
	 */
	public boolean update(String tableName,Map varMap,String condExp,Map condVars) throws Exception;
	
	/**
	 * 更新数据
	 * @param tableName 表名
	 * @param varMap	字段与值的map
	 * @param primaryKey 主键字段
	 * @param value	主键值
	 * @return 是否成功
	 */
	public boolean update(String tableName,Map varMap,String primaryKey,String value) throws Exception;
	
	/**
	 * 更新数据
	 * @param tableName 表名
	 * @param varMap 字段与值的map
	 * @param cond	更新条件
	 * @return 是否成功
	 */
	public boolean update(String tableName,Map varMap,String cond) throws Exception;
	
	/**
	 * 更新数据
	 * @param saveConfig
	 * @return 是否成功
	 */
	public boolean update(SaveConfig saveConfig) throws Exception;
	
	/**
	 * 查询数据
	 * @param queryConfig 查询配置
	 * @return 查询结果
	 */
	public List query(QueryConfig queryConfig) throws Exception;
	
	/**
	 * 分页查询
	 * @param tableName
	 * @param flds
	 * @param condExp
	 * @param condVars
	 * @param order
	 * @param start
	 * @param limit
	 * @return
	 */
	public List queryPage(String tableName,String flds,String condExp,Object[] condVars,String order,int start,int limit) throws Exception;
	
	/**
	 * 分页查询
	 * @param tableName
	 * @param flds
	 * @param cond
	 * @param order
	 * @param start
	 * @param limit
	 * @return
	 */
	public List queryPage(String tableName,String flds,String cond,String order,int start,int limit) throws Exception;
	
	/**
	 * 
	 * @param sql
	 * @param condVars
	 * @return
	 */
	public List query(String sql,Object[] condVars) throws Exception;
	
	/**
	 * 
	 * @param sql
	 * @return
	 */
	public List query(String sql) throws Exception;
	
	/**
	 * 查询数据
	 * @param tableName 表名
	 * @param flds	字段列表
	 * @param condExp 条件表达式
	 * @param condVars 参数值
	 * @return 查询结果
	 */
	public List query(String tableName,String flds,String condExp,Object[] condVars,String order) throws Exception;
	
	/**
	 * 查询数据
	 * @param tableName 表名
	 * @param flds 字段列表
	 * @param condExp 条件表达式
	 * @param condVars 参数的map
	 * @return 查询结果
	 */
	public List query(String tableName,String flds,String condExp,Map condVars,String order) throws Exception;
	
	/**
	 * 查询数据
	 * @param tableName 表名
	 * @param flds 字段列表
	 * @param primaryKey 主键字段
	 * @param value	主键值
	 * @return 查询结果
	 */
	public List query(String tableName,String flds,String primaryKey,String value,String order) throws Exception;
	
	/**
	 * 查询数据
	 * @param tableName 表名
	 * @param flds 字段列表
	 * @param cond 查询条件
	 * @return 查询结果
	 */
	public List query(String tableName,String flds,String cond,String order) throws Exception;
	
	/**
	 * 查询单个数据
	 * @param tableName 表名
	 * @param fldName 字段名
	 * @param condExp 条件表达式
	 * @param condVars 参数值
	 * @return 查询对象
	 */
	public Object queryForObject(String tableName,String fldName,String condExp,Object[] condVars) throws Exception;
	
	/**
	 * 查询单个数据
	 * @param tableName 表名
	 * @param fldName 字段名
	 * @param condExp 条件表达式
	 * @param condVars 参数值
	 * @return 查询对象
	 */
	public Object queryForObject(String tableName,String fldName,String condExp,Map condVars) throws Exception;
	
	/**
	 * 查询单个数据
	 * @param tableName 表名
	 * @param fldName 字段名
	 * @param primaryKey 条件表达式
	 * @param value	参数值
	 * @return 查询对象
	 */
	public Object queryForObject(String tableName,String fldName,String primaryKey,String value) throws Exception;
	
	/**
	 * 查询单个数据
	 * @param tableName 表名
	 * @param fldName 字段名
	 * @param cond 查询条件
	 * @return 查询对象
	 */
	public Object queryForObject(String tableName,String fldName,String cond) throws Exception;
	
	/**
	 * 查询数据总数
	 * @param queryConfig
	 * @return
	 */
	public int queryCount(QueryConfig queryConfig) throws Exception;
	
	/**
	 * 查询数据总数
	 * @param tableName 表名
	 * @param condExp 条件表达式
	 * @param condVars 参数值
	 * @return 数据数量
	 */
	public int queryCount(String tableName,String condExp,Object[] condVars) throws Exception;
	
	/**
	 * 查询数据总数
	 * @param tableName 表名
	 * @param condExp 条件表达式
	 * @param condVars 参数map值
	 * @return 数据数量
	 */
	public int queryCount(String tableName,String condExp,Map condVars) throws Exception;
	
	/**
	 * 查询数据总数
	 * @param tableName 表名
	 * @param primaryKey 主键字段
	 * @param value 主键值
	 * @return 数据数量
	 */
	public int queryCount(String tableName,String primaryKey,String value) throws Exception;
	
	/**
	 * 查询数据总数
	 * @param tableName 表名
	 * @param cond 查询条件
	 * @return 数据数量
	 */
	public int queryCount(String tableName,String cond) throws Exception;
	
	//级联删除
	
	/**
	 * 调用存储过程
	 * @param prcName 存储过程名称
	 * @param prcDto 参数
	 */
	public void callPro(String prcName, DTO prcDto) throws Exception;
	
	
}
